#implantation.dat <- readRDS("data/T0impl.Rds")
# fait.dat <- readRDS("data/T0New.Rds")
fait.dat <- read.csv("data/fait.txt", stringsAsFactors = FALSE) # besoin d'ajouter cela sinon il me garde tous les niveaux des facteurs
implantation.dat <- read.csv("data/implantation.txt")
# une exraction des relations
relation.dat <- fait.dat[fait.dat$caracNew == "Relations" ,]
# on extrait les Déplacements
relation.dat <- relation.dat[!relation.dat$modaNiv1 == "Déplacement",]
Les données sont regroupées en deux tableaux :
C’est du second que l’on tire les relations.
Il faut spécifier les encoding de 3 colonnes qui sont en “Latin1” alors que le reste semble être en UTF8. Au final knitr semble avoir un problème avec du “multi encoding”, j’ai donc fait un export/import le tout en UTF8.
Le tableau 1.1 reprend les nombre de données manquantes par variables. L’absence la plus importante est sur les dates et durée (358) manquantes), puis sur la localisation (109 NA) avec lat/long et granularité et sur les diocèse (11 NA).
# un apply, passer en df qui compte le nombre de NA par colonne
relation_na.dat <- as.data.frame(apply(relation.dat, 2, function(x)length(x[is.na(x)])))
names(relation_na.dat) <- "Nbr_NA" # on renome puis on fait une deuxième var qui prend les rowname
relation_na.dat$variables <- rownames(relation_na.dat)
rownames(relation_na.dat) <- NULL
# une bidouille pour avoir un titre de tableau avec ref
cat("<tableau>",paste0("<caption>", "(#tab:presenceNa)", ' Nombre de données manquantes par variabes', "</caption>"),"</tableau>", sep ="\n")
DT::datatable(relation_na.dat)
#knitr::kable(apply(relation.dat, 2, function(x)length(x[is.na(x)]))) # la version à l'arrache knitr
On obtient 3165 factoides avec une relation. Le tableau 2.1 répartit modalite en fonction des modaNiv1. Les relations peuvent être hiérarchiques ou horizontales, dans les cas hiérarchique, elles peuvent être ascendantes et descendantes. Elles peuvent ensuite être ascendantes/descendantes vers une école ou vers un autre type d’implantations. Les relations avec les écoles sont toujours d’appartenance/possession sauf dans un cas ou on est dans une filiation (ascendante/descendante) est ce une erreur de codage avec Filiation ascendante directe / hiérarchique descendante ?
knitr::kable(t(table(relation.dat$modaNiv1 , relation.dat$modalite)),
caption = "Ventilation de modaNiv1 en fonction de modalité")
| hiérarchique asc. Ecole | hiérarchique ascendante | hiérarchique desc. Ecole | hiérarchique descendante | Relation horizontale | |
|---|---|---|---|---|---|
| À la collation de | 0 | 199 | 0 | 0 | 0 |
| Appartient à | 178 | 207 | 0 | 0 | 0 |
| Association de prière | 0 | 0 | 0 | 0 | 146 |
| Droit de patronage | 0 | 0 | 0 | 199 | 0 |
| Filiation ascendante directe | 1 | 925 | 0 | 0 | 0 |
| Filiation descendante | 0 | 0 | 1 | 924 | 0 |
| Possède | 0 | 0 | 178 | 207 | 0 |
Il y a 283 valeurs manquantes au niveau des dates (cf. tableau 1.1). Ces valeurs manquantes ne sont pas consistantes dans les 6 champs de de description des dates. Ce n’est pas important pour moi (olivier) car j’utilise date_startC et date_stopC. Cependant on a 283 date_startC et 273 date_stopC mais on malgré tout 283 DuréeFact est-ce logique ? Puis-je utiliser DuréeFact quand je n’ai pas de date_startC ?
Voici les cas où l’on a une date_stopC et pas de date_startC :
NA_date <- relation.dat[is.na(relation.dat$date_startC),]
knitr::kable(NA_date[!is.na(NA_date$date_stop_max),c(2:4,7,13)]) # attention ici une indexation sur num de colonnes
| idfactoid | idimplantation | usual_name | caracNew | date_start_max | |
|---|---|---|---|---|---|
| 8039 | 38936 | 2743 | Saint-Georges-en-Couzan, Saint-Georges (église dépendante) | Relations | NA |
| 8040 | 38937 | 2190 | Lyon, Saint-Nizier | Relations | NA |
| 8124 | 39023 | 2792 | Saint-Alban, Saint-Alban (église dépendante) | Relations | NA |
| 8164 | 39065 | 1990 | Cerdon, Saint-Jean-Baptiste | Relations | NA |
| 9150 | 39225 | 2928 | Poitiers, Saint-Hilaire-le-Grand (école interne) | Relations | NA |
| 9162 | 39237 | 2932 | Tours, Saint-Martin (école interne) | Relations | NA |
| 9172 | 39247 | 3065 | Crépy-en-Valois, Saint-Thomas (école) | Relations | NA |
| 9329 | 39022 | 2651 | Poitiers, Saint-Hilaire-le-Grand | Relations | NA |
| 9341 | 39133 | 2966 | Tours, Saint-Martin | Relations | NA |
| 9374 | 39184 | 2846 | Crépy-en-Valois, Saint-Thomas | Relations | NA |
En regardant la répartition des valeurs manquantes temporelles en fonction de modalite (2.2) on peut remarquer qu’un couple A/D n’est pas complet (60/61). (est ce toujours des couples dans la nouvelle classif ?)
knitr::kable(table(NA_date$modalite), caption = "Répartition des NA temporelles dans les modalité")
| Var1 | Freq |
|---|---|
| À la collation de | 60 |
| Appartient à | 52 |
| Association de prière | 46 |
| Droit de patronage | 61 |
| Filiation ascendante directe | 6 |
| Filiation descendante | 6 |
| Possède | 52 |
On peut produire une carte rapide des valeurs manquantes pour les dates. On en a un gros cluster autour de la région lyonnaise et un autre autour de Charleville-Mézières. Est ce que cela suit une logique par rapport au données ? Avec la version 20191126 on a toujours ces clusters avec en plus des valeurs manquantes mieux réparties sur le territoires.
plot(st_geometry(diocese.shp))
plot(st_geometry(implantation.shp), add = T, col = "lightgrey", pch = 16, cex = .5)
plot(st_geometry(NA_date.shp), add = T, col = "red", pch = 16, cex = .5)
legend("topleft", legend=c("Avec dates", "Sans date"), pch = 16,
col=c("lightgrey", "red"))
Et voici une interactive sous mapview : (il y a deux relations qui ne trouve pas d’implantations est ce possible ?)
initmapview()
mapview::mapview(diocese.shp, color = "gray75", lwd = 1, # couleur et type du contour
col.regions = "grey", alpha = 0.5, # couleur du fond et type
layer.name = "Diocèses" ) +
mapview::mapview(implantation.shp, cex = 0.1, layer.name = "Implantations") +
mapview::mapview(NA_date.shp, zcol = "modaNiv1", layer.name = "Relations sans dates")
## Warning in validateCoords(lng, lat, funcName): Data contains 1 rows with
## either missing or invalid lat/lon values and will be ignored
## Warning in validateCoords(lng, lat, funcName): Data contains 2 rows with
## either missing or invalid lat/lon values and will be ignored
Je n’ai pas gardé les relations hiérarchique asc. Ecole et hiérarchique ascendante pour les analyses suivantes car elles sont identiques aux descendantes.
Les durées sont produites à partir des fourchettes de dates de début et de fin (date_start_min/max et date_stop_min/max). Il n’y a que trois cas d’écarts importants entre date_start_min et date_start_max représenté par la figure 2.1. Les données manquantes ne sont pas prises en compte. date_stop_min et date_stop_max sont identiques pour les relations.
# c'est du js
f <- list(
family = "Courier New, monospace",
size = 18,
color = "#7f7f7f"
)
x <- list(
title = "date_start_min",
titlefont = f
)
y <- list(
title = "date_start_max",
titlefont = f
)
# j'enleve les doublons A/D et NA
relation_sans_A.dat <- subset(relation.dat, !(relation.dat$modaNiv1 == "hiérarchique asc. Ecole" | relation.dat$modaNiv1 == "hiérarchique ascendante") )
relation_sans_A.dat <- relation_sans_A.dat[!is.na(relation_sans_A.dat$date_startC),]
# il ignore les NA
plot_ly(relation_sans_A.dat, x = relation_sans_A.dat$date_start_min, y = relation_sans_A.dat$date_start_max, type="scatter", # on def X et y
# on fait un text
text = paste(relation_sans_A.dat$usual_name, relation_sans_A.dat$modalite, relation_sans_A.dat$linked_implantation, sep = "\n")) %>%
layout(xaxis = x, yaxis = y)
Figure 2.1: Écarts entre date_start_min et date_start_max
La figure 2.2 regroupe les répartitions des dates (par tranches de 50 ans) de début et fin des modes d’agrégations. Avec ce grain, assez grossier, on peut noter un premier pic dans les dates de relation autour 1100 pour les relations A/D (penser à détailler cette agrégation), suivit d’un second pic de début de relation autour de 1300 qui n’est rattrapé en fin de relation qu’en 1750-1800. Il y a deux pics de dates de début/fin pour les associations de prières (H) le premier autour de 1250-1300 et le second autour de 1400 pour le début puis 1450 pour la fin.
# on va utiliser ggplot2 donc il faut que cela soit en tidy, au moins un peu
relation_sans_NA_tidy.dat <- gather(relation_sans_A.dat, "date_startC", "date_stopC", key = "debut_fin", value = "date")
# date de début et de fin des relation par modAgreg
date_modalite <- ggplot(relation_sans_NA_tidy.dat, aes(date, color = debut_fin)) +
geom_freqpoly(binwidth = 50) +
facet_wrap(~modaNiv1) +
labs(x = "", y = "") +
theme_bw()
# c'est du js
f <- list(
family = "Courier New, monospace",
size = 18,
color = "#7f7f7f"
)
x <- list(
title = "date (50 ans)",
titlefont = f
)
y <- list(
title = "décompte",
titlefont = f
)
ggplotly(date_modalite) %>%
layout(xaxis = x, yaxis = y)
Figure 2.2: Répartition des dates (début/fin) par tranches de 50 ans en fonction des modes d’agrégation
En plus des 273-283 valeurs manquantes il y 878 durées nulles (DureeFact == 0). Est-il possible que ces durées soit inférieures à notre grain temporelle (une année) ?
Il y a 612 durées de plus d’un an.
le tableau 2.3 représente la répartition des durées nulles par modalités. Le droit de patronage, l’association de prière et la possession restent dans des proportions similaires entre les deux catégories (0/1) par Filiation descendante semble proportionnellement moins souvent représentés par des durées (notre olivier : je n’ai pas fait de chi2 ni de comparaison multiple est-ce utile/nécessaire ?).
relation_sans_A.dat$modalite <- factor(relation_sans_A.dat$modalite) # on recode pour dropper les niveau du facteur absent
# une variable pour séparer ceux qui ont une durée des autres
relation_sans_A.dat$durée01 <- 0
relation_sans_A.dat$durée01[relation_sans_A.dat$DureeFact != 0] <- 1
knitr::kable(table(relation_sans_A.dat$modalite, relation_sans_A.dat$durée01), caption = "Répartition des durées nulles (0) ou supérieures à 1 (1) par modalités") # puis un tableau
| 0 | 1 | |
|---|---|---|
| Association de prière | 56 | 44 |
| Droit de patronage | 71 | 67 |
| Filiation descendante | 584 | 335 |
| Possède | 167 | 166 |
La figure 2.3 correspond aux distribution des durées en fonction des modalités de relation. On a des durées négatives.
f <- list(
family = "Courier New, monospace",
size = 18,
color = "#7f7f7f"
)
y <- list(
title = "Durée (années)",
titlefont = f
)
relation_duree.dat <- relation_sans_A.dat[relation_sans_A.dat$DureeFact != 0,]
plot_ly(relation_duree.dat, y = ~DureeFact, color = ~modalite, type = "box",
text = paste(relation_duree.dat$usual_name, relation_duree.dat$modalite, relation_duree.dat$linked_implantation, sep = "\n")) %>%
layout(yaxis = y)
Figure 2.3: Boites à moustaches des durées en fonction des modalités de relation